package entities;

import java.io.Serializable;
import java.util.List;

import javax.persistence.*;

import org.hibernate.annotations.NotFound;
import org.hibernate.annotations.NotFoundAction;

@Entity
@Table(name="bienes")
public class BienBean implements Serializable {

	private static final long serialVersionUID = 1L;
	
	@Id
	@Column(name="identificacion")
	private String registro;
	@Column(name="valuacion")
	private float valor;
	
	@ManyToMany(fetch=FetchType.EAGER)
	@JoinTable(name="contriBienes",
				joinColumns=@JoinColumn(name="identificacion"),
				inverseJoinColumns=@JoinColumn(name="identificador")
			)	
	@NotFound(action=NotFoundAction.IGNORE)
	private List<ContribuyenteBean> contribuyentes;
	
	public ImpuestoBean impuesto;
	
	public String getRegistro() {
		return registro;
	}
	public void setRegistro(String registro) {
		this.registro = registro;
	}
	public float getValor() {
		return valor;
	}
	public void setValor(float valor) {
		this.valor = valor;
	}
	public ImpuestoBean getImpuesto() {
		return impuesto;
	}
	public void setImpuesto(ImpuestoBean impuesto) {
		this.impuesto = impuesto;
	}
	public BienBean() {
	}
	
	public dto.BienDto toDto(){
		dto.BienDto b = new dto.BienDto();
				
		b.setRegistro(this.registro);
		b.setValor(this.valor);
		//b.setImpuesto(this.impuesto);
		
		return b;
	}
	public List<ContribuyenteBean> getContribuyentess() {
		return contribuyentes;
	}
	public void setContribuyenes(List<ContribuyenteBean> contribuyenes) {
		this.contribuyentes = contribuyenes;
	}
	@Override
	public String toString() {
		return "BienBean [registro=" + registro + ", valor=" + valor
				+ ", contribuyentes=" + contribuyentes + ", impuesto=" + impuesto
				+ "]";
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((contribuyentes == null) ? 0 : contribuyentes.hashCode());
		result = prime * result
				+ ((impuesto == null) ? 0 : impuesto.hashCode());
		result = prime * result
				+ ((registro == null) ? 0 : registro.hashCode());
		result = prime * result + Float.floatToIntBits(valor);
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		BienBean other = (BienBean) obj;
		if (contribuyentes == null) {
			if (other.contribuyentes != null)
				return false;
		} else if (!contribuyentes.equals(other.contribuyentes))
			return false;
		if (impuesto == null) {
			if (other.impuesto != null)
				return false;
		} else if (!impuesto.equals(other.impuesto))
			return false;
		if (registro == null) {
			if (other.registro != null)
				return false;
		} else if (!registro.equals(other.registro))
			return false;
		if (Float.floatToIntBits(valor) != Float.floatToIntBits(other.valor))
			return false;
		return true;
	}
}
